home *** CD-ROM | disk | FTP | other *** search
/ Mac Cube 4: Multimedia Applications / MacCube Volume 4: Multimedia Applications.iso / Graphics / POV Ray / POVSOURCE / SOURCE / MoviesFormat.h < prev    next >
Text File  |  1993-11-30  |  14KB  |  575 lines

  1. /************************************************************
  2.  
  3. Created: Tuesday, June 8, 1993 at 3:10 PM
  4.  MoviesFormat.h
  5.  C Interface to the Macintosh Libraries
  6.  
  7.  
  8.  Copyright Apple Computer, Inc. 1991, 1992
  9.  All rights reserved
  10.  
  11. ************************************************************/
  12.  
  13. #ifndef __MOVIESFORMAT__
  14. #define __MOVIESFORMAT__
  15.  
  16. #ifndef __MOVIES__
  17. #include <Movies.h>
  18. #endif
  19.  
  20. #define kMovieVersion    (0)                /* version number of the format here described */
  21.  
  22. #ifndef kSmallestArray
  23.     #define kSmallestArray    1
  24. #endif
  25.  
  26. /****************************************
  27. *
  28. *   General Types -
  29. *        These types are used in more than one of the
  30. *        directory types.
  31. *
  32. ****************************************/
  33.  
  34. /* MoviesUserData is the type used for user data in movie and track directories */
  35.  
  36. struct MoviesUserData {
  37.     long        size;                        /* size of this user data */
  38.     long        type;                        /* type of user data */
  39.     char         data[kSmallestArray];        /* the user data */
  40.     };
  41. typedef struct MoviesUserData MoviesUserData;
  42.  
  43. struct UserDataAtom {
  44.     long             size;
  45.     long            type;
  46.     MoviesUserData    userData[kSmallestArray];
  47.     };
  48. typedef struct UserDataAtom UserDataAtom;
  49.  
  50. /* MoviesDataDescription tells us where the data for the movie or track lives.
  51.    The data can follow the directory, be in the datafork of the same file as the directory resource,
  52.    be in the resource fork of the same file as the directory resource, be in another file in the 
  53.    data fork or resource fork, or require a specific bottleneck to fetch the data. */
  54.  
  55.  
  56. /****************************************
  57. *
  58. *   MediaDirectory information -
  59. *        The MediaDirectory is tightly coupled to the data.
  60. *
  61. ****************************************/
  62.  
  63. /* The SampleDescriptionTable holds the SampleDescriptions needed to decompress chunks given the
  64.    SampleDescriptionID. There is a table per Media. */
  65.  
  66. /*
  67. struct SampleDescription {
  68.     long        size;
  69.     long        type;
  70.     long        resvd1;
  71.     short        resvdA;
  72.     short        dataRefId;
  73.     };
  74. typedef struct SampleDescription SampleDescription;
  75. typedef SampleDescription **SampleDescriptionHandle;
  76. */
  77.  
  78. struct SampleDescriptionAtom {
  79.     long        size;
  80.     long        type;                            /* = 'stsd' */
  81.     long        flags;                            /* 1 byte of version / 3 bytes of flags */
  82.     long        numEntries;
  83.     SampleDescription    sampleDescTable[kSmallestArray];
  84.     };
  85. typedef struct SampleDescriptionAtom SampleDescriptionAtom;
  86.  
  87. /* TimeToSampleNum maps physical sample time to physical sample number. */
  88. struct TimeToSampleNum {
  89.     long        sampleCount;
  90.     TimeValue    sampleDuration;
  91.     };
  92. typedef struct TimeToSampleNum TimeToSampleNum;
  93.  
  94. struct TimeToSampleNumAtom {
  95.     long        size;
  96.     long        type;                            /* = 'stts' */
  97.     long        flags;                            /* 1 byte of version / 3 bytes of flags */
  98.     long        numEntries;
  99.     TimeToSampleNum    timeToSampleNumTable[kSmallestArray];
  100.     };
  101. typedef struct TimeToSampleNumAtom TimeToSampleNumAtom;
  102.     
  103.  
  104. /* SyncSamples is a list of the physical samples which are self contained. */
  105.  
  106. struct SyncSampleAtom {
  107.     long        size;
  108.     long        type;                                /* = 'stss' */
  109.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  110.     long        numEntries;
  111.     long        syncSampleTable[kSmallestArray];
  112.     };
  113. typedef struct SyncSampleAtom SyncSampleAtom;
  114.  
  115. /* SampleToChunk maps physical sample number to chunk number.
  116.  */
  117.  
  118. struct SampleToChunk {                /* same as SampleToChunk, but redundant first sample is removed */
  119.     long        firstChunk;
  120.     long        samplesPerChunk;
  121.     long        sampleDescriptionID;
  122.     };
  123. typedef struct SampleToChunk SampleToChunk;
  124.  
  125. struct SampleToChunkAtom {
  126.     long        size;
  127.     long        type;                                /* = 'stsc' */
  128.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  129.     long        numEntries;
  130.     SampleToChunk    sampleToChunkTable[kSmallestArray];
  131.     };
  132. typedef struct SampleToChunkAtom SampleToChunkAtom;
  133.  
  134. struct ChunkOffsetAtom {
  135.     long        size;
  136.     long        type;                                /* = 'stco' */
  137.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  138.     long        numEntries;
  139.     long        chunkOffsetTable[kSmallestArray];
  140.     };
  141. typedef struct ChunkOffsetAtom ChunkOffsetAtom;
  142.  
  143. struct SampleSizeAtom {
  144.     long        size;
  145.     long        type;                                /* = 'stsz' */
  146.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  147.     long        sampleSize;
  148.     long        numEntries;
  149.     long        sampleSizeTable[kSmallestArray];
  150.     };
  151. typedef struct SampleSizeAtom SampleSizeAtom;
  152.  
  153. struct ShadowSync {
  154.     long        fdSampleNum;
  155.     long        syncSampleNum;
  156.     };
  157. typedef struct ShadowSync ShadowSync;
  158.  
  159. struct ShadowSyncAtom {
  160.     long        size;
  161.     long        type;                                /* = 'stsz' */
  162.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  163.     long        numEntries;
  164.     ShadowSync        shadowSyncTable[kSmallestArray];
  165.     };
  166. typedef struct ShadowSyncAtom ShadowSyncAtom;
  167.  
  168. struct SampleTableAtom {
  169.     long        size;
  170.     long        type;            /* = 'stbl' */
  171.  
  172.     SampleDescriptionAtom    sampleDescription;
  173.     TimeToSampleNumAtom        timeToSampleNum;
  174.     SampleToChunkAtom        sampleToChunk;
  175.     SyncSampleAtom            syncSample;
  176.     SampleSizeAtom            sampleSize;
  177.     ChunkOffsetAtom            chunkOffset;
  178.     ShadowSyncAtom            shadowSync;
  179.     
  180.     };
  181. typedef struct SampleTableAtom SampleTableAtom;
  182.     
  183. struct PublicHandlerInfo {
  184.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  185.     
  186.     long                componentType;                    
  187.     long                componentSubType;                
  188.     long                componentManufacturer;
  189.     long                componentFlags;
  190.     long                componentFlagsMask;
  191.     char                componentName[kSmallestArray];
  192.     
  193.     };
  194. typedef struct PublicHandlerInfo PublicHandlerInfo;
  195.  
  196. struct HandlerAtom {
  197.     long                size;
  198.     long                type;                            /* = 'hdlr' */
  199.     
  200.     PublicHandlerInfo    hInfo;    
  201.     };
  202. typedef struct HandlerAtom HandlerAtom;
  203.     
  204. typedef long DataRefAtom;                                /* a data reference is a private structure */
  205.  
  206. struct DataInfoAtom {
  207.     long                size;
  208.     long                type;                            /* = 'dinf' */
  209.     
  210.     DataRefAtom            dataRef;
  211.     };
  212. typedef struct DataInfoAtom DataInfoAtom;
  213.  
  214. struct RgnAtom {
  215.     long        size;
  216.     long        type;
  217.     
  218.     short        rgnSize;
  219.     Rect        rgnBBox;
  220.     char        data[kSmallestArray];
  221.     };
  222. typedef struct RgnAtom RgnAtom;
  223.  
  224. struct MatteCompressedAtom {
  225.     long                size;
  226.     long                type;
  227.     
  228.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  229.     
  230.     ImageDescription    matteImageDescription;
  231.  
  232.     char                matteData[kSmallestArray];
  233.     };
  234. typedef struct MatteCompressedAtom MatteCompressedAtom;
  235.  
  236. struct MatteAtom {
  237.     long        size;
  238.     long        type;
  239.     
  240.     MatteCompressedAtom    aCompressedMatte;
  241.     };
  242. typedef struct MatteAtom MatteAtom;
  243.  
  244. struct ClippingAtom {
  245.     long        size;
  246.     long        type;
  247.     
  248.     RgnAtom        aRgnClip;
  249.     };
  250. typedef struct ClippingAtom ClippingAtom;
  251.  
  252. /***********************
  253. * Media Info Example Structures 
  254. ***********************/    
  255.  
  256.     
  257. struct VideoMediaInfoHeader {
  258.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  259.  
  260.     short                graphicsMode;                    /* for QD - transfer mode */
  261.     short                opColorRed;                        /* opcolor for transfer mode */
  262.     short                opColorGreen;
  263.     short                opColorBlue;
  264.     
  265.     };
  266. typedef struct VideoMediaInfoHeader VideoMediaInfoHeader;
  267.  
  268.  
  269. struct VideoMediaInfoHeaderAtom {
  270.     long                size;                            /* size of Media info */
  271.     long                type;                            /* = 'vmhd' */
  272.     VideoMediaInfoHeader    vmiHeader;
  273.     };
  274. typedef struct VideoMediaInfoHeaderAtom VideoMediaInfoHeaderAtom;
  275.  
  276. struct VideoMediaInfo {
  277.     long                size;                            /* size of Media info */
  278.     long                type;                            /* = 'minf' */
  279.     
  280.     VideoMediaInfoHeaderAtom    header;
  281.     
  282.     HandlerAtom            dataHandler;
  283.     
  284.     DataInfoAtom        dataInfo;
  285.     
  286.     SampleTableAtom        sampleTable;
  287.     };
  288. typedef struct VideoMediaInfo VideoMediaInfo;
  289.  
  290. struct SoundMediaInfoHeader {
  291.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  292.  
  293.      short                balance;                
  294.     short                rsrvd;
  295.     
  296.     };
  297. typedef struct SoundMediaInfoHeader SoundMediaInfoHeader;
  298.  
  299. struct SoundMediaInfoHeaderAtom {
  300.     long                size;                            /* size of Media info */
  301.     long                type;                            /* = 'vmhd' */
  302.     
  303.     SoundMediaInfoHeader    smiHeader;    
  304.     };
  305. typedef struct SoundMediaInfoHeaderAtom SoundMediaInfoHeaderAtom;
  306.  
  307. struct SoundMediaInfo {
  308.     long                size;                            /* size of Media info */
  309.     long                type;                            /* = 'minf' */
  310.     
  311.     SoundMediaInfoHeaderAtom    header;
  312.     
  313.     HandlerAtom            dataHandler;
  314.     
  315.     DataRefAtom            dataReference;
  316.     
  317.     SampleTableAtom        sampleTable;
  318.     };
  319. typedef struct SoundMediaInfo SoundMediaInfo;
  320.  
  321. struct MediaInfo {
  322.     long            size;
  323.     long            type;
  324.     
  325.     /* whatever data the media handler needs goes here */
  326.     };
  327. typedef struct MediaInfo MediaInfo;
  328.  
  329. /***********************
  330. * Media Directory Structures 
  331. ***********************/    
  332.  
  333. struct MediaHeader {
  334.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  335.     
  336.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  337.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  338.  
  339.     TimeValue            timeScale;                        /* start time for Media (Media time) */
  340.     TimeValue            duration;                        /* length of Media (Media time) */
  341.  
  342.     short                language;
  343.     short                quality;
  344.     };
  345. typedef struct MediaHeader MediaHeader;
  346.  
  347. struct MediaHeaderAtom {
  348.     long         size;
  349.     long        type;            
  350.     
  351.     MediaHeader    header;
  352.     };
  353. typedef struct MediaHeaderAtom MediaHeaderAtom;
  354.  
  355. struct MediaDirectory {
  356.     long                size;
  357.     long                type;                            /* = 'mdia' */
  358.     
  359.     MediaHeaderAtom            mediaHeader;                /* standard Media information */
  360.  
  361.     HandlerAtom            mediaHandler;
  362.  
  363.     MediaInfo            mediaInfo;
  364. };
  365. typedef struct MediaDirectory MediaDirectory;
  366.  
  367.  
  368. /***********************
  369. * Track Structures 
  370. ***********************/    
  371.     
  372. enum {
  373.     TrackEnable = 1<<0,
  374.     TrackInMovie = 1<<1,
  375.     TrackInPreview = 1<<2,
  376.     TrackInPoster = 1<<3
  377.     };
  378.     
  379. struct TrackHeader {
  380.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  381.  
  382.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  383.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  384.  
  385.     long                trackID;
  386.  
  387.     long                reserved1;
  388.  
  389.     TimeValue            duration;                        /* length of track (track time) */
  390.  
  391.     long                reserved2;
  392.     long                reserved3;
  393.  
  394.     short                layer;
  395.     short                alternateGroup;
  396.  
  397.     short                volume;
  398.     short                reserved4;
  399.  
  400.     MatrixRecord        matrix;
  401.     Fixed                trackWidth;
  402.     Fixed                trackHeight;
  403.         
  404. };
  405. typedef struct TrackHeader TrackHeader;
  406.  
  407. struct TrackHeaderAtom {
  408.     long                size;                            /* size of track header */
  409.     long                type;                            /* = 'tkhd' */
  410.         
  411.     TrackHeader        header;
  412.     };
  413. typedef struct TrackHeaderAtom TrackHeaderAtom;
  414.  
  415. struct EditListType {
  416.     TimeValue        trackDuration;
  417.     TimeValue        mediaTime;
  418.     Fixed            mediaRate;
  419.     };
  420. typedef struct EditListType EditListType;
  421.  
  422. struct EditListAtom {
  423.     long                size;
  424.     long                type;                            /* = elst */
  425.     
  426.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  427.  
  428.     long                numEntries;
  429.     EditListType        editListTable[kSmallestArray];
  430.     };
  431. typedef struct EditListAtom EditListAtom;
  432.  
  433. struct EditsAtom {
  434.     long            size;
  435.     long            type;                                /* = edts */
  436.     
  437.     EditListAtom    editList;
  438.     };
  439. typedef struct EditsAtom EditsAtom;
  440.  
  441.     
  442. struct TrackDirectory {
  443.     long                size;
  444.     long                type;                            /* = 'trak' */
  445.  
  446.     TrackHeaderAtom            trackHeader;                /* standard track information */
  447.  
  448.     ClippingAtom        trackClip;
  449.  
  450.     EditsAtom            edits;
  451.     
  452.     MediaDirectory        media;
  453.     
  454.      UserDataAtom        userData;                        /* space for extending with new data types */
  455. };
  456. typedef struct TrackDirectory TrackDirectory;
  457.  
  458. /****************************************
  459. *
  460. *   MovieDirectory -
  461. *        The MovieDirectory is the top level structure which 
  462. *        holds the TrackInstance describing where the
  463. *        TrackDirectories are.
  464. *
  465. ****************************************/
  466.  
  467. struct MovieHeader{
  468.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  469.  
  470.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  471.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  472.  
  473.     /* Time specifications */
  474.     TimeValue            timeScale;
  475.     TimeValue            duration;
  476.     Fixed                preferredRate;                    /* rate at which to play this movie */
  477.  
  478.     short                preferredVolume;                /* volume to play movie at */
  479.     short                reserved1;            
  480.  
  481.     /* Graphics specifications */
  482.     long                preferredLong1;                    
  483.     long                preferredLong2;                    
  484.  
  485.     MatrixRecord        matrix;
  486.  
  487.     TimeValue            previewTime;                    /* time in track the proxy begins (track time) */
  488.     TimeValue            previewDuration;                /* how long the proxy lasts (track time) */
  489.  
  490.     TimeValue            posterTime;                        /* time in track the proxy begins (track time) */
  491.  
  492.     TimeValue            selectionTime;                    /* time in track the proxy begins (track time) */
  493.     TimeValue            selectionDuration;                /* time in track the proxy begins (track time) */
  494.     TimeValue            currentTime;                    /* time in track the proxy begins (track time) */
  495.  
  496.     long                 nextTrackID;                    /* next value to use for a TrackID */
  497.  
  498.     };
  499. typedef struct MovieHeader MovieHeader;
  500.  
  501. struct MovieHeaderAtom {
  502.     long                size;
  503.     long                type;                            /* = 'mvhd' */
  504.  
  505.     MovieHeader     header;
  506.     };
  507. typedef struct MovieHeaderAtom MovieHeaderAtom;
  508.  
  509. struct MovieDirectory {
  510.     long                size;
  511.     long                type;                            /* = 'moov' */
  512.     
  513.     MovieHeaderAtom        header;
  514.     
  515.     ClippingAtom        movieClip;                
  516.     
  517.     /* Track Directories */
  518.     struct {
  519.         TrackDirectory  trackDirectory;                 /* Track directory information */    
  520.         }                 track[kSmallestArray];
  521.          
  522.      /* User data for Movie */
  523.      UserDataAtom        userData;                        /* space for user extensions */
  524.      
  525.     };
  526. typedef struct MovieDirectory MovieDirectory;
  527.  
  528.  
  529. /****************************************
  530. ****************************************/
  531.  
  532.  
  533. /* Movie formats and tags */
  534.     /* some system defined format IDs */
  535.     #define    MOVIE_TYPE        'moov'
  536.     #define TRACK_TYPE        'trak'
  537.     #define MEDIA_TYPE        'mdia'
  538.     #define VIDEO_TYPE        'vide'
  539.     #define SOUND_TYPE        'soun'
  540.  
  541.  
  542. /* atom id's */
  543.     #define MovieAID                'moov'
  544.     #define MovieHeaderAID            'mvhd'
  545.     #define ClipAID                    'clip'
  546.     #define RgnClipAID                'crgn'
  547.     #define MatteAID                'matt'
  548.     #define MatteCompAID            'kmat'
  549.     #define TrackAID                'trak'
  550.     #define    UserDataAID                'udta'
  551.     #define    TrackHeaderAID            'tkhd'
  552.     #define EditsAID                'edts'
  553.     #define EditListAID                'elst'
  554.     #define MediaAID                'mdia'
  555.     #define MediaHeaderAID            'mdhd'
  556.     #define    MediaInfoAID            'minf'
  557.     #define VideoMediaInfoHeaderAID    'vmhd'
  558.     #define SoundMediaInfoHeaderAID    'smhd'
  559.     #define GenericMediaInfoHeaderAID    'gmhd'
  560.     #define GenericMediaInfoAID        'gmin'
  561.     #define DataInfoAID                'dinf'
  562.     #define DataRefAID                'dref'
  563.     #define SampleTableAID            'stbl'
  564.     #define STSampleDescAID            'stsd'
  565.     #define STTimeToSampAID            'stts'
  566.     #define STSyncSampleAID            'stss'
  567.     #define STSampleToChunkAID        'stsc'
  568.     #define STShadowSyncAID            'stsh'
  569.     #define HandlerAID                'hdlr'
  570.     #define STSampleSizeAID            'stsz'
  571.     #define STChunkOffsetAID        'stco'
  572.     #define DataRefContainerAID     'drfc'
  573.     
  574. #endif __MOVIESFORMAT__
  575.